package server;
import server.exception.CashPointException;
import server.exception.TooLittleCashException;
import server.exception.TooMuchCashException;

/**
 * Diese Klasse wickelt die Zahlung (den Kauf der Ware) ab.
 * @author reto
 *
 */
public class CashPoint {	
	private Journal journal;
	public CashPoint()
	{
		this.journal=new Journal();
	}
	
	/**
	 * Eine Zahlung finded statt sofern mindestens der genaue Waren-Betrag übergeben wird.
	 * Falls mehr als der genaue Waren-Betrag übergeben wird, wird zusätzlich eine Exception ausgelöst.
	 * Falls weniger als der genaue Waren-Betrag übergeben wird, wird nur eine Exception ausgelöst. In diesem Falle
	 * findet keine Zahlung (also kein Kauf) statt
	 * @param customer Der Kunde, der seine Waren kaufen möchte
	 * @param amount Ein Betrag
	 * @throws CashPointException Falls zu wenig oder zu viel mitgegeben wird.
	 */
	public void pay(final Customer customer, final double amount)throws CashPointException
	{
		final double rest=amount-customer.getShoppingCart().getTotal();
		if(rest<0)
		{
			throw new TooLittleCashException(rest*(-1));
		}
		this.journal.addEntry(customer);
		customer.getShoppingCart().removeAllProducts();		
		if(rest>0) {
			throw new TooMuchCashException(rest);
		} else {
			return;
		}
	}
	/**
	 * Gibt das Journal (mit der Auflistung der verkauften Ware) zurück
	 * @return
	 */
	public Journal getJournal()
	{
		return this.journal;
	}
	
	
}
